/*
 * @Description: 主进程
 * @Date: 2020-10-20 15:21:40
 * @LastEditTime: 2020-10-20 17:22:04
 */

export default class MainWorker {
  static _worker = null;
  // worker实例化
  static init (callback) {
    if (!MainWorker._worker) {
      MainWorker._worker = new Worker("childWorker/test.js")
      MainWorker._worker.onmessage = function (event) {
        callback && callback(event.data) // 监听子线程发送的消息
      }
      MainWorker.error() // 异常处理
      /*
      * @Description: 关闭线程
      * 触发场景：
      * 1、关闭浏览器窗口 2、通过地址栏或收藏夹前往其他页面的时候 3、点击返回，前进，刷新，主页其中一个的时候
      * 4、点击 一个前往其他页面的url连接的时候 5、window.close() 关闭页面的时候 6、重新赋予window.location.href的值的时候
      */
      window.onbeforeunload = function (e) {
        MainWorker.close() // 结束worker
      }
    }
  }
  // 异常处理
  static error () {
    MainWorker._worker.onerror = function (e) {
      console.log("error at " + e.filename + ":" + e.lineno + e.message)
    }
  }
  // 结束worker
  static close () {
    if (MainWorker._worker) {
      MainWorker._worker.terminate()
      MainWorker._worker = null
    }
  }
  // 业务处理
  static business (data) {
    MainWorker._worker.postMessage(data)
  }
}